#include <stdio.h>
#include <malloc.h>
void QuickSort(int *,int ,int);
int main(){
	int data[]={23,3,34,545,5,12,10,21,3,4,2};
	int len;
	len = sizeof(data)/sizeof(data[0]);
	printf("%d\n",len);
	QuickSort(data,0,len-1);
	for (int i = 0; i < len; ++i)
		printf("%d ",data[i]);
	return 0;
}
/**
 * 快排算法
 * @Author   smallcatx0
 * @DateTime 2017-03-26
 * @param    data       [数据源]
 * @param    left       [起始下标]
 * @param    right      [结束下标]
 */
void QuickSort(int * data,int left,int right){
	int i,j;
	int k;
	if(left > right) return ;
	i = left; j = right;
	k = data[i];
	while(i < j){       //此次划分完成
		while(i < j && data[j]>k) j--; //从后往前找比k小的
		if (i < j){    
			data[i] = data[j];    //比k小的放k前面
			i++;
		}
		while(i < j && data[i]<k) i++; //从前往后找比k大的 
		if(i <j) {
			data[j] = data[i];       // 比k大的放k后面 
			j--;
		}
	}
	data[i] = k;
	QuickSort(data,left,i-1);  // 将k左侧再次进行划分
	QuickSort(data,i+1,right); // 将k右侧再次进行划分
}